const fs = require('fs')
const path = require('path')

// 只要new出来的Promise对象，那么他所代表的异步操作就立即执行
// 让Promise按需执行，必须把创建Promise的过程，封装都一个函数中

//  new Promise()  只是创建了一个形式上的异步操作；
//  new Promise(function(){}) 创建具体的异步操作

function readFilePromise(fpath) {
    const p = new Promise(function (resolve, reject) {
        fs.readFile(fpath, 'utf-8', (err, results) => {
            if (err) return reject(err)
            resolve(results)
        })
    })
    return p;
}
// readFilePromise(path.join(__dirname, '/files/1.txt')).then(function (results) {
//     console.log(results)
// }, function (err) {
//     console.log(err)
// })
// .then的成功的回调=必须指定，失败的回调可以省略
// ========================错误示范=====================：
// readFilePromise(path.join(__dirname, '/files/1.txt')).then(function (data1) {
//     console.log(data1)
//     readFilePromise(path.join(__dirname, '/files/1.txt')).then(function (data2) {
//         console.log(data2)
//         readFilePromise(path.join(__dirname, '/files/1.txt')).then(function (data3) {
//             console.log(data3)
//         })

//     })
// })

// ========顺序读取123文件===========
readFilePromise(path.join(__dirname, '/files/1.txt'))
.then(function(data1){
    console.log(data1)
    return readFilePromise(__dirname + '/files/2.txt') 
},function(err){
    console.log(err)
})
.then(function(data2){
    console.log(data2)
    return readFilePromise(__dirname + '/files/3.txt')
})
.then(data3 => console.log(data3))

// 后续的代码的执行严格依赖前面的Promise的执行结果，
// 前面的Promise执行失败后，让后面的代码局继续执行，只能使用.then指定失败的回调
